package database;
import java.sql.ResultSet;
import java.sql.SQLException;

import model.Oferta;
import java.util.ArrayList;
import java.util.List;

public class OfertaDAO
{
	public static void create(Oferta oferta) throws SQLException
	{
		int id = getNextId();
		Conexao.connect();
		Conexao.update("INSERT INTO oferta" +
				"(id,nome,precooriginal,desconto,datainicio,datafim,descricao,loja)"
				+ "values" +
				"(" + id + ",'" + oferta.getNome() + "'," + oferta.getPrecoOriginal() + "," +
				oferta.getPorcentagemDesconto() + ",'" + oferta.getInicioPromocao() + "','" +
				oferta.getTerminoPromocao()	+ "','" + oferta.getDescricao() + "','" +
				oferta.getLoja().getCnpj() + "');");
		Conexao.close();
	}

	public static Oferta read(int idOferta)
	{
		Oferta oferta = null;
		ResultSet resultSet = null;
		String loja = "";
		Conexao.connect();
		resultSet = Conexao.query("SELECT * FROM oferta WHERE id =" + idOferta + ";");
		try{
			if(resultSet.next())
			{
				oferta = new Oferta();
				oferta.setId(idOferta);
				oferta.setNome(resultSet.getString("nome"));
				oferta.setPrecoOriginal(resultSet.getInt("precooriginal"));
				oferta.setPorcentagemDesconto(resultSet.getInt("desconto"));
				oferta.setInicioPromocao(resultSet.getString("datainicio"));
				oferta.setTerminoPromocao(resultSet.getString("datafim"));
				oferta.setDescricao(resultSet.getString("descricao"));
				loja = resultSet.getString("loja");
				oferta.setPrecoPromocao();
			}
		}catch(Exception e)
		{
			System.out.println(e.getMessage());
		}
		Conexao.close();
		oferta.setLoja(LojaDAO.read(loja));
		return oferta;
	}

	public static void update(Oferta oferta)
	{
		Conexao.connect();
		Conexao.update("UPDATE oferta SET nome='" +
				oferta.getNome() + "',precooriginal=" + oferta.getPrecoOriginal() +
				",desconto=" + oferta.getPorcentagemDesconto() + ",datainicio='" + 
				oferta.getInicioPromocao() + "',datafim='" + oferta.getTerminoPromocao()
				+ "',descricao='" + oferta.getDescricao() + "',loja='" + oferta.getLoja().getCnpj() + "'" +
				"WHERE id=" + oferta.getId() + ";");
		Conexao.close();
	}

	public static void delete(int idOferta)
	{
		Conexao.connect();
		Conexao.update("DELETE FROM oferta WHERE id =" + idOferta);
		Conexao.close();
	}

	public static int getNextId() throws SQLException {
		Conexao.connect();
		ResultSet resultSet = null;
		String sqlClause = "SELECT MAX(id) as maxId FROM oferta";
		resultSet = Conexao.query(sqlClause);
		int nextId = 0;

		if (resultSet.next()) {
			nextId = resultSet.getInt("maxId");
		}

		nextId++;
		Conexao.close();
		return nextId;
	}

	public static List<Oferta> getCincoOfertas() throws SQLException {
		List<Oferta> ofertas = new ArrayList<Oferta>();
		List<String> lojas = new ArrayList<String>();
		Oferta oferta = null;
		ResultSet resultSet = null;
		Conexao.connect();
		resultSet = Conexao.query("SELECT * FROM oferta ORDER BY desconto,dataFim DESC LIMIT 5;");

		while(resultSet.next())
		{ 
			oferta = new Oferta();
			oferta.setId(resultSet.getInt("id"));
			oferta.setNome(resultSet.getString("nome"));
			oferta.setPrecoOriginal(resultSet.getInt("precooriginal"));
			oferta.setPorcentagemDesconto(resultSet.getInt("desconto"));
			oferta.setInicioPromocao(resultSet.getString("datainicio"));
			oferta.setTerminoPromocao(resultSet.getString("datafim"));
			oferta.setDescricao(resultSet.getString("descricao"));
			lojas.add(resultSet.getString("loja"));
			oferta.setPrecoPromocao();
			ofertas.add(oferta);


		}


		Conexao.close();

		for(int i = 0; i < ofertas.size();i++)
		{
			ofertas.get(i).setLoja(LojaDAO.read(lojas.get(i)));
		}
		
		return ofertas;
	}

	public static List<Oferta> getOfertasShopping(String cnpjShopping) throws SQLException {
		List<Oferta> ofertas = new ArrayList<Oferta>();
		List<String> lojas = new ArrayList<String>();
		ResultSet resultSet = null;
		String sqlClause = "SELECT oferta.*" +
		"FROM oferta,loja " +
		"WHERE oferta.loja = loja.cnpj AND loja.shopping ='" + cnpjShopping + "'";

		Conexao.connect();
		resultSet = Conexao.query(sqlClause);
		while(resultSet.next()) {
			Oferta oferta = new Oferta();
			oferta.setId(resultSet.getInt("id"));
			lojas.add(resultSet.getString("loja"));
			oferta.setNome(resultSet.getString("nome"));
			oferta.setDescricao(resultSet.getString("descricao"));
			oferta.setInicioPromocao(resultSet.getString("datainicio"));
			oferta.setTerminoPromocao(resultSet.getString("datafim"));
			oferta.setPrecoOriginal(resultSet.getInt("precooriginal"));
			oferta.setPorcentagemDesconto(resultSet.getInt("desconto"));

			ofertas.add(oferta);
		}

		Conexao.close();
		
		for(int i = 0; i < ofertas.size();i++)
		{
			ofertas.get(i).setLoja(LojaDAO.read(lojas.get(i)));
		}
		
		return ofertas;
	}

	public static List<Oferta> getOfertasLoja(String cnpjLoja) throws SQLException {
		List<Oferta> ofertas = new ArrayList<Oferta>();
		List<String> lojas = new ArrayList<String>();
		ResultSet resultSet = null;
		String sqlClause = "SELECT * FROM ofertas WHERE loja = '" + cnpjLoja + "'";

		Conexao.connect();
		resultSet = Conexao.query(sqlClause);
		while(resultSet.next()) {
			Oferta oferta = new Oferta();
			oferta.setId(resultSet.getInt("id"));
			lojas.add(resultSet.getString("loja"));
			oferta.setNome(resultSet.getString("nome"));
			oferta.setDescricao(resultSet.getString("descricao"));
			oferta.setInicioPromocao(resultSet.getString("datainicio"));
			oferta.setTerminoPromocao(resultSet.getString("datafim"));
			oferta.setPrecoOriginal(resultSet.getInt("precooriginal"));
			oferta.setPorcentagemDesconto(resultSet.getInt("desconto"));

			ofertas.add(oferta);
		}

		Conexao.close();
		
		for(int i = 0; i < ofertas.size();i++)
		{
			ofertas.get(i).setLoja(LojaDAO.read(lojas.get(i)));
		}
		
		return ofertas;		
	}
	
	public static List<Oferta> getAll() throws SQLException {
		List<Oferta> ofertas = new ArrayList<Oferta>();
		ResultSet resultSet = null;
		String sqlClause = "SELECT * FROM oferta";

		Conexao.connect();
		resultSet = Conexao.query(sqlClause);
		while(resultSet.next()) {
			Oferta oferta = new Oferta();
			oferta.setId(resultSet.getInt("id"));
			oferta.setLoja(LojaDAO.read(resultSet.getString("loja")));
			oferta.setNome(resultSet.getString("nome"));
			oferta.setDescricao(resultSet.getString("descricao"));
			oferta.setInicioPromocao(resultSet.getString("datainicio"));
			oferta.setTerminoPromocao(resultSet.getString("datafim"));
			oferta.setPrecoOriginal(resultSet.getInt("precooriginal"));
			oferta.setPorcentagemDesconto(resultSet.getInt("desconto"));

			ofertas.add(oferta);
		}

		Conexao.close();
		
		
		
		return ofertas;		
	}
}
